package comandos;

import java.util.ArrayList;

import model.Usuario;
import protocol.MensajeComando;
import client.ClienteSession;

public class BuscarUsuario implements ComandoCliente{
	private MensajeComando estadoOperacion;
	private static Usuario usuario;
	private static ArrayList<Usuario> usuariosEncontrados;
	private Usuario usuarioBuscado;
	private static final Object lock = new Object();
	
	@SuppressWarnings("unchecked")
	public void ejecutar (ClienteSession cliente, boolean invocadoPorServidor){
		if (invocadoPorServidor){
			try
			{// Recibo la lista de amigos
				synchronized (lock) {
					BuscarUsuario.usuariosEncontrados = (ArrayList<Usuario>) cliente.getInput().readObject();
					lock.notify();
					System.out.println("Se notifica");
				}				
			}catch (Exception e){
				System.out.println(e.getMessage());
			}			
		}
		else //Sino fue invocado por el servidor, estoy buscando usuarios
		{
			try {
				//Envio un mensaje de peticion de la busqueda de usuarios
				cliente.getOutput().writeObject(new MensajeComando("buscar_usuario",0));
				cliente.getOutput().flush();
				
				//Envio el usuario buscado
				cliente.getOutput().writeObject(this.usuarioBuscado);
				cliente.getOutput().flush();
				
			} catch (Exception e){
				System.out.println(e.getMessage());
			}
			
		}
			

	}

	public ArrayList<Usuario> getUsuariosEncontrados() throws InterruptedException {
		synchronized (lock) {
			lock.wait();
			return usuariosEncontrados;
		}
	}

	public void setUsuariosEncontrados(ArrayList<Usuario> usuariosEncontrados) {
		BuscarUsuario.usuariosEncontrados = usuariosEncontrados;
	}

	public MensajeComando getEstadoOperacion() {
		return estadoOperacion;
	}

	public void setEstadoOperacion(MensajeComando estadoOperacion) {
		this.estadoOperacion = estadoOperacion;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		BuscarUsuario.usuario = usuario;
	}

	public Usuario getUsuarioBuscado() {
		return usuarioBuscado;
	}

	public void setUsuarioBuscado(Usuario usuarioBuscado) {
		this.usuarioBuscado = usuarioBuscado;
	}	
	
}
